Field
The present disclosure relates generally to direct communications between communication devices.
Background
The LINUX kernel is capable of supporting the direct client-to-client (DCC) communication protocol of Internet Relay Chat (IRC) as an alternative to other chatroom and instant message-type mediums. However, this feature is often not enabled on processors that are installed on many cellular phones today. Thus, the challenges of executing communication via the IRC are not well-understood.
For instance, once IRC is enabled on a LINUX-based processor, two clients accessing the Internet via the same gateway may want to carry out direct communication without the access point, using the DCC features of IRC. However, network address translation (NAT) in the gateway can modify IP addresses in data packets such that the clients are unable to establish a connection and thus can't implement direct IRC communication.
FIG. 1 illustrates a system 100 including two clients 102, 104, an IRC server 106, and a gateway 108 facilitating communication between the clients 102, 104 and the IRC server 106 via the Internet 110. Client 1 can initiate communication by requesting a DCC link to Client 2. This request is made to the gateway 108 with the inclusion of a private IP address for Client 1 (e.g., a private IP address and a private port address). Because this request has to be sent through the Internet to the IRC, a NAT component 112 of the gateway 108 mangles or changes the Private IP address associated with the outgoing request to a public IP address of the gateway 108.
The request is then sent from the gateway 108 to the IRC server 106, and the IRC server 106 responds by sending the request back to the public IP address of the gateway 108. The gateway 108 receives the request and knowing that the public IP address is a proxy for the private IP address Client 1, and knowing that the request was intended for Client 2, passes the request to Client 2 without mangling or changing the public IP address. Client 2 receives the request and attempts to establish a TCP connection with the sender of the request. To do this Client 2 responds to Client 1 with a SYN signal, believing that the requester is associated with the public IP address. When Client 2 receives the SYN signal and acknowledges with a SYN-ACK signal, this acknowledgement is associated with the private IP address of Client 1. Client 2 receives this acknowledgment, but is expected to receive an acknowledgment from the public IP address. Not recognizing the private IP address, Client 2 rejects the connection and the TCP connection fails.
Accordingly, there is a need for systems, methods, and apparatus that enable DCC communication between IRC clients.